home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / term-source.lha / Beep.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  2.3 KB  |  120 lines

  1. /*
  2. **    Beep.c
  3. **
  4. **    Simple beep sound support routine
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16.     /* Beep():
  17.      *
  18.      *    Produce a simple decent beep sound.
  19.      */
  20.  
  21. VOID
  22. Beep()
  23. {
  24.     if(SoundConfig.Volume)
  25.     {
  26.         struct MsgPort *AudioPort;
  27.  
  28.             /* Create the IO reply port. */
  29.  
  30.         if(AudioPort = (struct MsgPort *)CreateMsgPort())
  31.         {
  32.             struct IOAudio *AudioRequest;
  33.  
  34.                 /* Create the audio IO info. */
  35.  
  36.             if(AudioRequest = (struct IOAudio *)CreateIORequest(AudioPort,sizeof(struct IOAudio)))
  37.             {
  38.                 STATIC UBYTE AnyChannel[4] =
  39.                 {
  40.                     LEFT0F,LEFT1F,    RIGHT0F,RIGHT1F
  41.                 };
  42.  
  43.                 AudioRequest->ioa_Request.io_Command                = ADCMD_ALLOCATE;
  44.                 AudioRequest->ioa_Request.io_Flags                    = ADIOF_NOWAIT | ADIOF_PERVOL;
  45.                 AudioRequest->ioa_Request.io_Message.mn_Node.ln_Pri    = 127;
  46.                 AudioRequest->ioa_Data                                = AnyChannel;
  47.                 AudioRequest->ioa_Length                            = sizeof(AnyChannel);
  48.  
  49.                     /* Open audio.device */
  50.  
  51.                 if(!OpenDevice(AUDIONAME,0,AudioRequest,0))
  52.                 {
  53.                         /* Minimal sine wave. */
  54.  
  55.                     STATIC BYTE __chip SineWave[8] =
  56.                     {
  57.                          90,
  58.                          127,
  59.                          90,
  60.                          0,
  61.                         -90,
  62.                         -127,
  63.                         -90,
  64.                          0
  65.                     };
  66.  
  67.                         /* Prepare to play a beep sound. */
  68.  
  69.                     AudioRequest->ioa_Request.io_Command    = CMD_WRITE;
  70.                     AudioRequest->ioa_Request.io_Flags        = ADIOF_PERVOL;
  71.                     AudioRequest->ioa_Period                = SysBase->ex_EClockFrequency / 3200;
  72.                     AudioRequest->ioa_Volume                = (SoundConfig.Volume * (64 / 2)) / 100;
  73.                     AudioRequest->ioa_Cycles                = 150;
  74.                     AudioRequest->ioa_Data                    = SineWave;
  75.                     AudioRequest->ioa_Length                = sizeof(SineWave);
  76.  
  77.                         /* Play it. */
  78.  
  79.                     BeginIO(AudioRequest);
  80.                     WaitIO(AudioRequest);
  81.  
  82.                         /* Close audio.device */
  83.  
  84.                     CloseDevice(AudioRequest);
  85.                 }
  86.  
  87.                     /* Free the audio request. */
  88.  
  89.                 DeleteIORequest(AudioRequest);
  90.             }
  91.  
  92.                 /* Free the IO reply port. */
  93.  
  94.             DeleteMsgPort(AudioPort);
  95.         }
  96.     }
  97. }
  98.  
  99.     /* BellSignal():
  100.      *
  101.      *    Your whole bell signal routine (visible + audible).
  102.      */
  103.  
  104. VOID
  105. BellSignal()
  106. {
  107.         /* Handle the visual part. */
  108.  
  109.     if(Config->TerminalConfig->BellMode != BELL_AUDIBLE)
  110.     {
  111.         if(StatusProcess)
  112.             Signal(StatusProcess,SIG_BELL);
  113.     }
  114.  
  115.         /* Let it beep. */
  116.  
  117.     if(Config->TerminalConfig->BellMode == BELL_AUDIBLE || Config->TerminalConfig->BellMode == BELL_BOTH)
  118.         SoundPlay(SOUND_BELL);
  119. }
  120.